/**
 * 
 */
package br.edu.catolica.sadbc.action;

import java.util.ArrayList;
import java.util.List;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.datamodel.DataModel;

import br.edu.catolica.sadbc.core.action.AbstractAction;
import br.edu.catolica.sadbc.core.exception.BusinessObjectException;
import br.edu.catolica.sadbc.core.util.StringUtil;
import br.edu.catolica.sadbc.entity.Atividade;
import br.edu.catolica.sadbc.entity.filter.AtividadeSearchFilter;
import br.edu.catolica.sadbc.manager.AtividadeManager;

/**
 * @author robert.resende
 *
 */
@Name(value = "atividadeAction")
public class AtividadeAction extends AbstractAction<Atividade> {
	
	@In(required = false)
	@Out(required = false)
	private Atividade atividade;
	
	@In(required = false)
	private AtividadeSearchFilter atividadeSearchFilter;
	
	@In(required = false)
	private AtividadeManager atividadeManager;
	
	@DataModel
	private List<Atividade> atividades;
	
	private Boolean exibeDataTable = Boolean.FALSE;
	
	public void init() {
		this.atividade = null;
		this.atividadeSearchFilter = null;
		this.atividades = new ArrayList<Atividade>();
		this.exibeDataTable = Boolean.FALSE;
	}
	
	public List<Atividade> pesquisarAtividade() {
		if (validarCamposPesquisa(this.atividadeSearchFilter)) {
			this.atividades = this.atividadeManager.buscarAtividade(this.atividadeSearchFilter);
			if (!this.atividades.isEmpty()) {
				this.exibeDataTable = Boolean.TRUE;
			} else {
				this.atividades.clear();
				this.exibeDataTable = Boolean.FALSE;
				addMessageInfo("Nenhum resultado encontrado.");
			}
		}
		return this.atividades;
	}
	
	public String salvar() {
		try {
			String retorno = this.atividadeManager.salvar(this.atividade);
			addMessageInfo("Operação realizada com sucesso!");
			return retorno;
		} catch (BusinessObjectException e) {
			e.printStackTrace();
			addMessageErro(e.getLocalizedMessage());
			return RESULT_FAIL;
		}
	}
	
	public String detalhar(Atividade atividade) {
		this.atividade = atividade;
		return RESULT_DETAIL;
	}
	
	public String editar(Atividade atividade) {
		this.atividade = atividade;
		return RESULT_EDIT;
	}
	
	public String atualizar() {
		try {
			String retorno = this.atividadeManager.update(this.atividade);
			addMessageInfo("Operação realizada com sucesso!");
			return retorno;
		} catch (BusinessObjectException e) {
			e.printStackTrace();
			addMessageErro(e.getLocalizedMessage());
			return RESULT_FAIL;
		}
	}
	
	private boolean validarCamposPesquisa(AtividadeSearchFilter atividadeSearchFilter) {
		if (StringUtil.getInstance().isVazia(atividadeSearchFilter.getNomeAtividade()) 
				&& StringUtil.getInstance().isVazia(atividadeSearchFilter.getDescricaoAtividade())
					&& atividadeSearchFilter.getTipoAtividade() == null) {
			addMessageErro("Nenhum filtro de pesquisa informado.");
			return Boolean.FALSE;
		} else if (StringUtil.getInstance().isNaoVazia(atividadeSearchFilter.getNomeAtividade()) && StringUtil.getInstance().isMenor(3, atividadeSearchFilter.getNomeAtividade())) {
			addMessageErro("Campo nome informado menor que 3 caracteres.");
			return Boolean.FALSE;
		} else if (StringUtil.getInstance().isNaoVazia(atividadeSearchFilter.getDescricaoAtividade()) && StringUtil.getInstance().isMenor(3, atividadeSearchFilter.getDescricaoAtividade())) {
			addMessageErro("Campo descrição informado menor que 3 caracteres.");
			return Boolean.FALSE;
		}
		return Boolean.TRUE;
	}
	
	public Boolean getExibeDataTable() {
		return exibeDataTable;
	}

	public void setExibeDataTable(Boolean exibeDataTable) {
		this.exibeDataTable = exibeDataTable;
	}

}
